package net.realsee.domain.wcs.rcs.hikv4;

import lombok.Data;

import java.util.List;

/**
 * 海康RCS生成任务单V4参数
 *
 * @author 孙正华
 * @since 2023/9/20 10:04
 */
@Data
public class HikGenAgvSchedulingTaskV4Req {

    /**
     * 任务类型 在物流机器人调度系统配置，封装了与业务系统无关的内部调度逻辑。 可扩展的枚举值。 预制枚举值： TRANSPORT 搬运，一至数个执行步骤。
     */
    private String taskType;

    /**
     * 外部任务唯一编号,如果为空，系统生成任务号并返回。
     */
    private String robotTaskCode;

    /**
     * 任务执行的初始优先顺序，数值越大，优先级越高。但机器人调度系统会根据任务繁忙程度，机器人的工作状态，以及其他优先级修正条件，进行综合判定后，实时动态调整任务实际的优先级数值。
     */
    private Integer initPriority;

    /**
     * 能否打断， 1:可打断 该货架中途有其他任务时，打断当前任务。 0:不可打断 该货架中途有其他任务时，不能打断当前任务。默认不可打断。
     */
    private Integer interrupt;

    /**
     *
     */
    private List<TargetRoute> targetRoute;

    /**
     *
     */
    private Extra extra;

    /**
     *
     */
    @Data
    public static class TargetRoute {

        /**
         * 目标类型。可扩展枚举值。 预制枚举值：
         * ZONE 目标所处区域编号
         * SITE 站点别名
         * STORAGE 仓位别名
         * MAT_LABEL 物料标签
         * CARRIER 载具编号
         * STACK 巷道编号
         * STACK_LABEL 巷道特征值
         * EQPT 外部设备
         * PTL_WALL 分播墙
         * CARRIER_TYPE 载具类型
         * BIN_TYPE 仓位类型
         * AREA_STATION 区域工作台
         * PILE_COUNT  堆叠个数
         * MIX_CONDITION 条件组合
         */
        private String type;

        /**
         * 与type对应的目标编号
         * 枚举为ZONE时：支持多个区域，以逗号隔开，
         * 例如： ZONE1,ZONE2
         * 枚举为STRATEGY_GROUP时，格式如下： [{"type":"ZONE","code":"SF2"},{"type":" CARRIER_TYPE","code":"P1"}]
         * 例如：code："[{\"type\":\"STACK\",\"code\":\"1\"},{\"type\":\"STACK_LABEL\",\"code\":\"c1\"}]"
         */
        private String code;

        /**
         * 序号
         */
        private Integer seq;

        /**
         * 该步骤是否自动开始。固定枚举值。
         * 预制枚举值： 0 否 1 是
         * 暂不需要
         */
        private Integer autoStart;

        /**
         * 机器人到达目标位置后的操作。可扩展的枚举值。
         * 预制枚举值： COLLECT 取货 DELIVERY 送货 ROTATE 旋转
         * 暂不需要
         */
        private String operation;

    }

    /**
     * 扩展信息
     */
    @Data
    public static class Extra {

        /**
         * 生产者
         */
        private String producer;

        /**
         * 异步的
         */
        private Integer async;

    }

}
